# -*- coding: utf-8 -*-
# @Time    : 2024/7/23 17:48
# @Author  : yujiahao
# @File    : 56_fastapi_response_cookies.py
# @description:响应Cookies


from fastapi import FastAPI, Response
from starlette.responses import JSONResponse

app = FastAPI()


# 使用 Response 参数
# 你可以在 路径函数 中定义一个类型为 Response的参数，这样你就可以在这个临时响应对象中设置cookie了。

@app.post("/cookie-and-object/")
def create_cookie(response: Response):
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return {"message": "Come to the dark side, we have cookies"}


# 直接响应
@app.post("/cookie/")
def create_cookie_1():
    """
    需要注意，如果你直接反馈一个response对象，而不是使用Response入参，FastAPI则会直接反馈你封装的response对象。

    所以你需要确保你响应数据类型的正确性，如：你可以使用JSONResponse来兼容JSON的场景。

    同时，你也应当仅反馈通过response_model过滤过的数据。
    """
    content = {"message": "Come to the dark side, we have cookies"}
    response = JSONResponse(content=content)
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return response
